package com.wjm.api.SynchronizePackage;

/**
 * Data:2022年07月27日
 * Author:wjm
 * Content: 静态方法加锁（synchronized）
 *
 *
 *    静态方法加锁时，该方法具有永久同步的效果
 *    因为静态方法上使用同步监视器是同一个对象，这个对象是类对象，即Class的一个实例
 *    JVM在加载类时，会创建一个唯一与之对应的“类对象”，即 类名.class
 *
 *    当我们对一个静态方法加锁，如:
 *    public synchronized static void xxx(){
 *        ….
 *    }
 *    那么该方法锁的对象是类对象。每个类都有唯一的一个类对象。获取类对象的方式:类名.class。
 *
 */
public class SynchronizeDemo2 {
    public static void main(String[] args) {
        Aoo aoo1 = new Aoo();
        Aoo aoo2 = new Aoo();

        //创建线程
        Thread thread1 = new Thread("wjm"){
            @Override
            public void run() {
                aoo1.a();
            }
        };

        //创建线程
        Thread thread2 = new Thread("cwt"){
            @Override
            public void run() {
                aoo2.a();
            }
        };

        //启动线程
        thread1.start();
        thread2.start();

    }
}


class Aoo{//JVM在加载Aoo时，会创建一个唯一与之对应的“类对象”，即Aoo.class
    public synchronized static void a(){
        try {
            System.out.println(Thread.currentThread().getName()+"开始执行。。。。");
            Thread.sleep(2000);
            System.out.println(Thread.currentThread().getName()+"执行完毕！");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}